iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
Software Development

我在 Spring Boot 3 裡面挖呀挖呀挖系列 第 7

Day06 - 常用註解-組件註冊

  • 分享至 

  • xImage
  •  

Day06 - 常用註解-組件註冊

前言

昨日我們初探自動裝配機制,要更深入探討自動裝配機制前,需要好好研究一下常用的Annotation才能更完整了解自動配置機制。

創建專案

https://ithelp.ithome.com.tw/upload/images/20230922/20128084ozuFKBC12L.png

常見註解介紹

@Configuration、@SpringBootApplication

回憶一下過去我們怎麼使用xml來將bean設定到container呢,官方文件參照,沒錯@Configuration就等同於xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		https://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="emp" class="com.swj.bean.Employee">
        <property name="id" value="123456">
        <property name="name" value="james">  
	</bean>
</beans>

等同於

//@SpringBootConfiguration//配置類,與@Configuration相同
@Configuration
public class AppConfig {

    @Scope("prototype") //預設是singelton,可以透過設置修該為非singleton
    @Bean
    //@Bean("empBean") //透過此設置可以修改BeanName
    public Employee emp(){
        Employee emp = new Employee();
        emp.setId("1");
        emp.setEmpName("james");
        return emp;
    }
}

查看一下ioc container
https://ithelp.ithome.com.tw/upload/images/20230922/20128084NapAjr89Sr.png
@Configuration、@SpringBootApplication其實只是區分為Spring的配置類或其他配置類
https://ithelp.ithome.com.tw/upload/images/20230922/20128084ydxJoK4qNG.png

@Controller、 @Service、@Repository、@Component

這幾個annotation其實是相同的,標註於類別上方,為的是區分不同業務分層
https://ithelp.ithome.com.tw/upload/images/20230922/20128084dgWsoDtwOG.png

@ComponentScan

點進@SpringBootApplication我們就可以看到@ComponentScan的註解,也就是預設會從哪個package路徑掃描組件
https://ithelp.ithome.com.tw/upload/images/20230922/20128084qxeb8AjrcS.png

加入第三方組件的方式

由於Spring Boot預設的ComponentScan是在SpringApplication註解所在的package下,那麼如何讓Spring Boot可以將各starter加載到IOC容器中這就很重要了

  1. 在@Configuration中將第三方組件new出來
    為了測試我們加載IBM MQ的套件
<!-- https://mvnrepository.com/artifact/com.ibm.mq/com.ibm.mq.allclient -->
<dependency>
    <groupId>com.ibm.mq</groupId>
    <artifactId>com.ibm.mq.allclient</artifactId>
    <version>9.3.3.1</version>
</dependency>

試著將MQChannelDefinition導到ioc中
https://ithelp.ithome.com.tw/upload/images/20230922/20128084oLmxsygfe7.png

//@SpringBootConfiguration//配置類,與@Configuration相同
@Configuration
public class AppConfig {
    @Bean
    public MQChannelDefinition ibmMQ(){
        return new MQChannelDefinition();
    }
}

載入成功
https://ithelp.ithome.com.tw/upload/images/20230922/20128084y49MXdv617.png
2. 透過@Import的方式
https://ithelp.ithome.com.tw/upload/images/20230922/201280841Cqe1d9Cqx.png
載入成功
https://ithelp.ithome.com.tw/upload/images/20230922/20128084zJP5on6q0c.png

Reference


上一篇
Day05 - 自動配置機制初探
下一篇
Day07 - 常用註解-條件註解
系列文
我在 Spring Boot 3 裡面挖呀挖呀挖31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言